package cn.tedu.blog.server.service;

import cn.tedu.blog.server.pojo.dto.UserAddNewDTO;
import cn.tedu.blog.server.pojo.dto.UserDetailsDTO;
import cn.tedu.blog.server.pojo.dto.UserLoginDTO;
import cn.tedu.blog.server.pojo.vo.*;
import cn.tedu.blog.server.utils.JsonPage;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author: 雷茂林
 * @Date:2022/7/15 14:50
 * @Description: 用户管理-业务逻辑接口
 */

public interface IUserService {

    /**
     * 创建用户
     * @param userAddNewDTO
     * @return
     */
    @Transactional
    void createUser(UserAddNewDTO userAddNewDTO);



    /**
     * 删除用户
     * @param id
     * @return
     */
    @Transactional
    void deleteById(Long id);



    /**
     * 批量删除用户
     * @param list
     * @return
     */
    @Transactional
    void deleteByIds(List<Long> list);



    /**
     * 分配角色
     * @param roleArray
     * @return
     */
    void updateRoleByUserId(Long id,Long[] roleArray);



    /**
     * 修改用户基本信息
     * @param userAddNewDTO
     * @return
     */
    @Transactional
    void updateById(UserAddNewDTO userAddNewDTO);



    /**
     * 用户修改密码
     * @param userLoginDTO
     * @return
     */
    @Transactional
    void updatePasswordByUserName(UserLoginDTO userLoginDTO);



    /**
     * 根据条件查询结果集的数量
     * @return
     */
    int getCountAll(UserListVO userListVO);



    /**
     * 根据用户id回显用户信息
     * @param id
     * @return
     */
    UserListVO getBackFillById(Long id);


    /**
     * 根据手机号回显用户账号
     */
    String getUserNameByPhone(String phone);



    /**
     * 分页条件查询用户信息
     * @param userListVO
     * @return
     */
    JsonPage<UserListVO> listByKeyword(UserListVO userListVO);



    /**
     * 密码查询
     * @param userLoginDTO
     * @return
     */
    String login(UserLoginDTO userLoginDTO);



    /**
     * 短信登录
     */
    String phoneLogin(String phone);



    /**
     * 查询用户数
     * @return Long
     */
    Long userCount();

    /**
     * 获取用户中心相关数据接口
     * @return
     */
    UserCenterDetailVO getUserCenter();

    /**
     *  根据用户id获取用户关注博主列表
     * @param pagSize 查询条数
     * @return 用户关注博主的列表
     */
    List<UserFollowDetailVO> getUserByUserId(int pagSize);

    /**
     *  根据用户id获取粉丝列表
     * @param pagSize 查询条数
     * @return 关注用户的粉丝列表
     */
    List<UserFollowDetailVO> getFansByUserId(int pagSize);


    UserLoginVO selectUser();

    /**
     * 查询用户详细信息
     * @return 用户详细信息
     */
    UserDetailsVO getUserDetailByUserId();

    /**
     * 修改用户信息
     * @param userDetailsDTO 用户修改信息
     */
    void updateUserByUserId(UserDetailsDTO userDetailsDTO);


}
